const error = console.error
import Vue from 'vue'

/**
 * http请求 请求方法使用uView的Http请求（http://uviewui.com/js/http.html）
 * @param {String} url 请求的URL，可以完整的URL(http开头)，或者是路径的一部分，这时会自动拼接上baseUrl(common/config.js ==> ENV_LIST[?].BASEURL)
 * @param {Object} data 请求的参数，对象形式，如"{name: 'lisa', age: 23}"，该参数是可选的
 * @param {String} method 请求的Method，该参数是可选的，默认为get请求
 * @param {Object} headers 请求的header，对象形式，如果token等字段，API文件与拦截器配置的将进行合并处理，该参数是可选的
 */
function http(url, data = {}, method = 'get', headers = {}) {
    return new Promise((resolve, reject) => {
        if (!url) {
            error('URL cannot be empty ! ')
            reject({errMsg: 'URL cannot be empty !'})
        }
        // 在App.vue中请求获取不到getApp()的情况下，使用Vue.prototype中的uView
        let request = getApp() && getApp().$vm ? getApp().$vm.$u : Vue.prototype.$u
        request[method ? method.toLocaleLowerCase() : 'get'](url, data, headers).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

module.exports = http